var DGJ = {
    DEBUG : true,
	SERVER : 'http://10.0.1.116:8080/app-web/kop',
	DB_NAME : 'dgj_app',
	/**
	 *开启debug
	 */
	enableDebug : function() {
		DGJ.DEBUG = true;
	},
	/**
	 *关闭debug
	 */
	disableDebug : function() {
		DGJ.DEBUG = false;
	},
	/**
	 *toast提示
	 */
	toast : function(msg, time, location) {
		api.toast({
			msg : msg,
			duration : time ? time : 2000,
			location : location ? location : 'middle'
		});
	},
	/**
	 *验证手机号
	 */
	checkPhone : function(phone) {
		return /^(13[0-9]|15[0|3|6|7|8|9]|18[0-9])\d{8}$/.test(phone);
	},
	checkPassword : function(pwd) {
		return true;
	},
	initTables : function() {
		DB.exist("dgj_login_user", DGJ.DB_NAME, function() {
			var sql = 'CREATE TABLE "dgj_login_user" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "u_name" TEXT, "u_pwd" TEXT, "u_real_name" TEXT, "u_phone" TEXT, "u_last_login_time" DATETIME, "u_login_ip" TEXT, "u_reg_time" DATETIME, "u_l_id" INTEGER, "u_tenant" INTEGER, "u_origin" TEXT, "u_zip" TEXT, "u_id_card" TEXT, "u_owe" TEXT, "u_device_type" TEXT, "u_device_info" TEXT, "u_born_time" DATETIME, "u_live_time" DATETIME, "u_out_time" DATETIME, "u_remark" TEXT, "u_work_unit" TEXT, "u_head_id" INTEGER, "u_cur_community_id" INTEGER, "u_address" TEXT, "u_nick_name" TEXT, "u_sex" TEXT )'
			DB.runSQL(DGJ.DB_NAME, sql, function(ret, err) {
				LOG.j('----ret-->>', ret)
				LOG.j('----err-->>', err)
			});
		}, function() {
			if (DGJ.DEBUG) {
				LOG.d('----init table-->>', "表 'dgj_login_user'已经存在!")
			}
		});

	}
}

var DB = {
	status : {}, //声明一个对象专门用来存储各种操作状态
	/**
	 *获取数据库的打开状态
	 */
	isOpen : function() {
		return DB.status['isOpen'];
	},
	/**
	 *获取数据库对象
	 */
	getDB : function() {
		return api.require('db');
	},
	/**
	 *判断表是否存在
	 *  @param {Object} name 数据库名称
	 */
	exist : function(tableName, dbName, notExist, exist) {
		DB.runQuery(dbName, "SELECT count(*) as c FROM sqlite_master WHERE type='table' AND name='" + tableName + "'", function(ret, err) {
			if (ret && ret.data[0].c == 1) {
				if (exist) {
					exist();
				} else {
					LOG.d('检查表存在结果', '存在!')
				}
			} else {
				notExist();
			}
		});
	},
	/**
	 *打开数据库
	 * @param {Object} name 数据库名称
	 * @param {Function} callback 打开数据库之后的回调
	 */
	openDB : function(name, callback) {
		if (DGJ.DEBUG) {
			LOG.d("openDB", "即将打开数据库 ' " + name + " '");
		}
		DB.getDB().openDatabase({
			name : name
		}, function(ret, err) {
			if (DGJ.DEBUG) {
				LOG.d("openDB return ", "打开数据库 ' " + name + " '" + (ret.status ? "成功" : "失败"));
			}
			status['isOpen'] = ret.status;
			//将数据库打开状态存入状态对象中
			if (callback) {//如果有回调将执行回调
				callback(ret, err);
			}
		});
	},
	/**
	 *关闭数据库
	 * @param {Object} name 数据库名称
	 * @param {Function} callback 关闭数据库之后的回调
	 */
	closeDB : function(name, callback) {
		if (DGJ.DEBUG) {
			LOG.d("closeDB", "即将关闭数据库 ' " + name + " '");
		}
		DB.getDB().closeDatabase({
			name : name
		}, function(ret, err) {
			if (DGJ.DEBUG) {
				LOG.d("closeDB return", "关闭数据库 ' " + name + " '" + (ret.status ? "成功" : "失败"));
			}
			status['isOpen'] = !ret.status;
			if (callback) {//如果有回调将执行回调
				callback(ret, err);
			}
		});

	},
	/**
	 *执行查询
	 * @param {Object} name 数据库名称
	 * @param {Object} sql 查询语句
	 * @param {Function} callback 查询返回的回调
	 */
	runQuery : function(name, sql, callback) {
		DB.openDB(name, function(ret, err) {
			if (ret) {
				if (DGJ.DEBUG) {
					LOG.d("query", "即将在数据库 '" + name + "' 执行查询,查询语句如下: '" + sql + "' ");
				}
				DB.getDB().selectSql({
					name : name,
					sql : sql
				}, function(ret, err) {
					if (DGJ.DEBUG) {
						LOG.d("query return", "在数据库 '" + name + "' 执行查询 '" + sql + "' " + (ret.status ? "成功" : "失败"));
						LOG.d("query return", "返回数据为:");
						LOG.j("query return", ret);
					}
					callback(ret, err);
					DB.closeDB(name);
					//回调完毕之后关闭数据库
				});
			} else {
				DGJ.toast('打开数据库失败')
			}
		});
	},
	/**
	 * 执行sql
	 * @param {Object} name 数据库名称
	 * @param {Object} sql 查询语句
	 * @param {Function} callback 查询返回的回调
	 */
	runSQL : function(name, sql, callback) {
		DB.openDB(name, function(ret, err) {
			if (ret) {
				if (DGJ.DEBUG) {
					LOG.d("runsql", "即将在数据库 '" + name + "' 执行sql语句,语句如下: '" + sql + "' ");
				}
				DB.getDB().executeSql({
					name : name,
					sql : sql
				}, function(ret, err) {
					if (DGJ.DEBUG) {
						LOG.d("runsql return", "在数据库 '" + name + "' 执行语句 '" + sql + "' " + (ret.status ? "成功" : "失败"));
					}
					callback(ret, err);
					DB.closeDB(name);
					//回调完毕之后关闭数据库
				});
			} else {
				DGJ.toast('打开数据库失败');
			}
		});
	}
}
/**
 *日志工具
 */
var LOG = {
	/**
	 *debug
	 * @param {Object} obj
	 */
	d : function(tag, obj) {
		if ( typeof obj == 'string') {
			console.log("debug with tag " + tag + " : " + obj);
			return;
		}
		for (key in obj) {
			console.log("debug with tag " + tag + " : " + key + " : " + obj[key] + "\n");
		}
	},
	/**
	 *json方式debug
	 * @param {Object} obj
	 */
	j : function(tag, obj) {
		console.log("debug as json with tag " + tag + " >>> :" + JSON.stringify(obj));
	}
}
/**
 *URL处理工具
 */
var URL = {
	/**
	 *获取url上面的参数map
	 */
	getParas : function() {
		var target = {};
		var search = location.search;
		if (!search.length) {
			return target;
		}
		search = search.substr(1);
		$(search.split('&')).each(function(i, item) {
			var key = item.split('=')[0];
			target[key] = item.split('=')[1];
		});
		return target;
	},
	/**
	 *获取url上面的指定参数
	 * @param {Object} key 参数的key
	 */
	getPara : function(key) {
		return URL.getParas()[key];
	}
}

/**
 *请求处理类
 */
var KOP = {
	/**
	 * 发送请求
	 * @param {Object} url 请求url
	 * @param {Object} paras 参数
	 * @param {Object} files 文件路径或者文件
	 * @param {Object} callback 回调函数
	 */
	send : function(url, paras, files, onsuccess, onfail) {
		api.getPrefs({
			key : 'cookie'
		}, function(ret, err) {
			var cookie = 'kop';
			if (ret) {
				cookie = ret.value;
			}
			var headers = {//处理会话保持
				cookie : cookie
			};
			LOG.j('-----header------->',headers);
			//处理参数
			var data = {
				values : paras
			};
			if (files) {
				data['files'] = files;
			}
			//发送请求
			api.ajax({
				url : DGJ.SERVER + url,
				method : 'post',
				timeout : 10,
				dataType : 'json',
				returnAll : true,
				data : data,
				headers : headers,
				charset : 'utf-8',
				cache : true
			}, function(ret, err) {
				var result = {};
				if (ret && ret.headers['Set-Cookie']) {//会话保持
					LOG.d('---存入cookie---->',ret.headers['Set-Cookie']);
					api.setPrefs({
						key : 'cookie',
						value : ret.headers['Set-Cookie']
					});
				}
				if (ret && ret.body.operationState == 'SUCCESS') {//请求成功而且业务状态处理成功
					result = ret.body;
					result['statusCode'] = ret.statusCode;
					onsuccess(result);
				} else {
					result['operationState'] = 'FAIL';
					if (ret && ret.body.operationState == 'UNLOGINED') {//请求成功,但是返回未登录状态
						result['operationState'] = 'UNLOGINED';
						result['reason'] = '你还没有登录';
					} else if (ret && ret.body.data.reason) {//请求成功,但是业务处理失败
						result['reason'] = ret.body.data.reason;
					} else if (ret.statusCode == 404) {
						result['reason'] = '请求的接口不存在';
					} else if (ret.statusCode == 500) {
						result['reason'] = '请求的接口发送了错误';
					} else if (ret.statusCode == 403) {
						result['reason'] = '你没有权限请求该接口';
					} else {
						result['reason'] = '发送了错误,请联系大管家';
					}

					if (onfail) {
						onfail(result);
					} else {
						DGJ.toast(result.reason);
					}
				}
			});
		});
	}
}
